home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 12984 / 12984.xpi / chrome / VideoDownloaderToolbar.jar / content / utils.js < prev    next >
Text File  |  2010-01-29  |  11KB  |  407 lines

  1. if(!com) var com={};
  2. if(!com.VidBar) com.VidBar={};
  3.  
  4. com.VidBar.__d = function(msg) {
  5.     dump("Vid debug\t" + msg + "\n");
  6. };
  7. com.VidBar.__e = function(msg) {
  8.     dump("Vid error\t" + msg + "\n");
  9. };
  10.  
  11. // TODO: rethink naming of com.VidBar.Pref and Vidbar.Preferences to avoid confusion
  12. com.VidBar.Pref = {
  13.     //VidNS = "http://viddownloader.com/1.0#",
  14.  
  15.     observers : {},
  16.     pref : Components.classes["@mozilla.org/preferences-service;1"]
  17.             .getService(Components.interfaces.nsIPrefService).getBranch("vidbar."),
  18.     prefBranch2 : null,
  19.  
  20.     init : function() {
  21.         com.VidBar.__d("Pref: init");
  22.         this.prefBranch2 = this.pref
  23.                 .QueryInterface(Components.interfaces.nsIPrefBranch2);
  24.         this.prefBranch2.addObserver("", this, false);
  25.     },
  26.     close : function(event) {
  27.         com.VidBar.__d("Pref: close");
  28.         try {
  29.             this.prefBranch2.removeObserver("", this);
  30.         } catch (e) {
  31.         }
  32.     },
  33.     observe : function(subject, topic, data) {
  34.         if (topic == "nsPref:changed") {
  35.             if (data in this.observers) {
  36.                 try {
  37.                     this.observers[data].observePref(data);
  38.                 } catch (e) {
  39.                     dump("com.VidBar.Pref.observe error: " + e + "\n");
  40.                 }
  41.  
  42.             }
  43.         }
  44.     },
  45.     registerObserver : function(prefs, observer) {
  46.         for (var i in prefs) {
  47.             this.observers[prefs[i]] = observer;
  48.         }
  49.     },
  50.     getIconStyle : function() {
  51.         //com.VidBar.__d("Pref: getIconStyle");
  52.         var is = "3D";
  53.         try {
  54.             is = this.pref.getCharPref("icon-style");
  55.         } catch (e) {
  56.         }
  57.         return is;
  58.     },
  59.     getIconPos : function() {
  60.         //com.VidBar.__d("Pref: getIconPos");
  61.         var pos = "toolbar";
  62.         try {
  63.             pos = this.pref.getCharPref("icon-pos");
  64.         } catch (e) {
  65.         }
  66.         return pos;
  67.     },
  68.     getLayoutType : function() {
  69.         //com.VidBar.__d("Pref: getLayoutType");
  70.         var layout = "toolbar";
  71.         try {
  72.             layout = this.pref.getCharPref("layout-type");
  73.         } catch (e) {
  74.         }
  75.         return layout;
  76.     },
  77.     isContextMenuShown : function() {
  78.         //com.VidBar.__d("Pref: isContextMenuShown");
  79.         var show = true;
  80.         try {
  81.             show = this.pref.getBoolPref("show-in-context-menu");
  82.         } catch (e) {
  83.         }
  84.         return show;
  85.     },
  86.     isFirstTime : function() {
  87.         //com.VidBar.__d("Pref: isFirstTime");
  88.         var firstTime = true;
  89.         try {
  90.             firstTime = this.pref.getBoolPref("first-time");
  91.         } catch (e) {
  92.         }
  93.         return firstTime;
  94.     },
  95.     unsetFirstTime : function() {
  96.         com.VidBar.__d("Pref: unsetFirstTime");
  97.         this.pref.setBoolPref("first-time", false);
  98.     },
  99.     clearFirstTime : function() {
  100.         com.VidBar.__d("Pref: clearFirstTime");
  101.         try {
  102.             this.pref.clearUserPref("first-time");
  103.         } catch(e) {
  104.         }        
  105.     },
  106.     getToolbarId : function() {
  107.         com.VidBar.__d("Pref: getToolbarId");
  108.         var id;
  109.         try {
  110.             id = this.pref.getCharPref("id");
  111.         } catch(e) {
  112.         id = "video.downloader.plugin@ffpimp.com"
  113.         }    
  114.         return id;        
  115.     },
  116.     getToolbarVer : function() {
  117.         com.VidBar.__d("Pref: getToolbarVer");
  118.         var version;
  119.         try {
  120.             version = this.pref.getCharPref("version");
  121.         }  catch(e) {
  122.             version = "0.0";
  123.         } 
  124.         return version;
  125.     },
  126.     setToolbarVer : function(ver) {
  127.         com.VidBar.__d("Pref: setToolbarVer");
  128.         this.pref.setCharPref("version", ver);
  129.     },
  130.     getMediaExtensions : function() {
  131.         //com.VidBar.__d("Pref: getMediaExtensions");
  132.         var exts = "flv|ram|mpg|mpeg|avi|rm|wmv|mov|asf|mp3|rar|movie|divx";
  133.         try {
  134.             exts = this.pref.getCharPref("media-extensions");
  135.         } catch (e) {
  136.         }
  137.         return exts;
  138.     },
  139.     getMinMediaSize : function() {
  140.         //com.VidBar.__d("Pref: getMinMediaSize");
  141.         var threshold = 100;
  142.         try {
  143.             threshold = this.pref.getIntPref("min-file-size");
  144.         } catch (e) {
  145.         }
  146.         if (threshold <= 0)
  147.             threshold = 100;
  148.         return threshold * 1024;
  149.     },
  150.     getDefaultDir : function() {
  151.         //com.VidBar.__d("Pref: getDefaultDir");
  152.         var file = null;
  153.         try {
  154.             file = Components.classes["@mozilla.org/file/directory_service;1"]
  155.                     .getService(Components.interfaces.nsIProperties).get(
  156.                             "Desk", Components.interfaces.nsIFile);
  157.         } catch (e) {
  158.             try {
  159.                 file = Components.classes["@mozilla.org/file/directory_service;1"]
  160.                         .getService(Components.interfaces.nsIProperties).get(
  161.                                 "TmpD", Components.interfaces.nsIFile);
  162.             } catch (e) {
  163.             }
  164.         }
  165.         if (!file.exists()) {
  166.             throw "Default Dir Error: no home dir found";
  167.         }
  168.         //file.append("vid");
  169.         return file;
  170.     },
  171.     getDownloadDirectory : function() {
  172.         //com.VidBar.__d("Pref: getDownloadDirectory");
  173.         var fileName = null;
  174.         try {
  175.             fileName = this.pref.getComplexValue("download-location",
  176.                     Components.interfaces.nsISupportsString).data;
  177.         } catch (e) {
  178.         }
  179.  
  180.         var file;
  181.         if (fileName == null || fileName.length == 0) {
  182.             file = this.getDefaultDir();
  183.         } else {
  184.             file = Components.classes["@mozilla.org/file/local;1"]
  185.                     .createInstance(Components.interfaces.nsILocalFile);
  186.             file.initWithPath(fileName);
  187.             if (file.exists() == false || file.isWritable() == false
  188.                     || file.isDirectory() == false)
  189.                 file = this.getDefaultDir();
  190.         }
  191.         if (!file.exists()) {
  192.             file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  193.         }
  194.         this.setUnicharPref("download-location", file.path);
  195.         return file;
  196.     },
  197.     getFileNameType : function() {
  198.         //com.VidBar.__d("Pref: getFileNameType");
  199.         var is = "title";
  200.         try {
  201.             is = this.pref.getCharPref("filename-type");
  202.         } catch (e) {
  203.         }
  204.         return is;
  205.     },
  206.     setUnicharPref : function(prefName, value) {
  207.         var str = Components.classes["@mozilla.org/supports-string;1"]
  208.                 .createInstance(Components.interfaces.nsISupportsString);
  209.         str.data = value;
  210.         this.pref.setComplexValue(prefName,
  211.                 Components.interfaces.nsISupportsString, str);
  212.     },
  213.     setDownloadDirectory : function(dir) {
  214.         //com.VidBar.__d("Pref: setDownloadDirectory");
  215.         this.setUnicharPref("download-location", dir);
  216.     },
  217.     getMaxDownload : function() {
  218.         //com.VidBar.__d("Pref: getMaxDownload");
  219.         var max = 0;
  220.         try {
  221.             max = this.pref.getIntPref("max-downloads");
  222.         } catch (e) {
  223.         }
  224.         if (max < 0)
  225.             max = 0;
  226.         return max;
  227.     },
  228.     checkYoutubeHQ : function() {
  229.         //com.VidBar.__d("Pref: checkYoutubeHQ");
  230.         var check = true;
  231.         try {
  232.             check = this.pref.getBoolPref("youtube-check-hq");
  233.         } catch (e) {
  234.         }
  235.         return check;
  236.     },
  237.     getInboxUrl : function(){
  238.         var url = "";
  239.         try{
  240.             url = this.pref.getCharPref("inbox-url");
  241.         }catch(e){
  242.         }
  243.         return url;
  244.     },
  245.     getFBPref : function(p){
  246.         var v = "";
  247.         try{
  248.             v = this.pref.getCharPref("fb."+p);
  249.         }catch(e){
  250.         }
  251.         return v;
  252.     },
  253.     setFBPref : function(p, v){
  254.         try{
  255.             this.pref.setCharPref("fb."+p, v);
  256.         }catch(e){
  257.         }
  258.     }
  259. };
  260.  
  261. var VidStatus = {
  262.     NOTDOWNLOADED : 0,
  263.     ENQUEUED : 1,
  264.     DOWNLOADING : 2,
  265.     COMPLETE : 3,
  266.     FAILED : 4,
  267.     CANCELLED : 5,
  268.     PAUSED : 6,
  269.     QUEUED : 7,
  270.     BLOCKED : 8,
  271.     SCANNING : 9,
  272.     translateState : function(state){
  273.         return state+2;
  274.     }
  275. };
  276.  
  277. var VidUtils = {
  278.     S4 : function() {
  279.         return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
  280.     },
  281.     generateGuid : function() {
  282.         return (this.S4() + this.S4() + "-" + this.S4() + "-" + this.S4() + "-"
  283.                 + this.S4() + "-" + this.S4() + this.S4() + this.S4());
  284.     },
  285.     trimString : function(str) {
  286.         // If the incoming string is invalid, or nothing was passed in, return
  287.         // empty
  288.         if (!str)
  289.             return "";
  290.  
  291.         str = str.replace(/^\s+/, ''); // Remove leading whitespace
  292.         str = str.replace(/\s+$/, ''); // Remove trailing whitespace
  293.  
  294.         // Replace all whitespace runs with a single space
  295.         str = str.replace(/\s+/g, ' ');
  296.  
  297.         return str; // Return the altered value
  298.     },
  299.     getSizeStr : function(size) {
  300.         if (!size) {
  301.             return "Unknown";
  302.         } else {
  303.             size = parseInt(size * 100 / 1024) / 100;
  304.             if (size < 512) {
  305.                 return size + "KB";
  306.             } else {
  307.                 size = parseInt(size * 100 / 1024) / 100;
  308.                 return size + "MB";
  309.             }
  310.         }
  311.     },
  312.     getDownloadStatusDisplay : function(status) {
  313.         var statusStr = "";
  314.         var style = "";
  315.         switch (status) {
  316.             case VidStatus.NOTDOWNLOADED :
  317.                 break;
  318.             case VidStatus.ENQUEUED :
  319.                 statusStr = "Enqueued";
  320.                 style = "color:teal;";
  321.                 break;
  322.             case VidStatus.DOWNLOADING :
  323.                 statusStr = "Downloading";
  324.                 style = "color:teal;";
  325.                 break;
  326.             case VidStatus.COMPLETE :
  327.                 statusStr = "Complete";
  328.                 style = "color:green;";
  329.                 break;
  330.             case VidStatus.FAILED :
  331.                 statusStr = "Failed";
  332.                 style = "color:red;";
  333.                 break;
  334.             case VidStatus.CANCELLED :
  335.                 statusStr = "Canceled";
  336.                 style = "color:purple;";
  337.                 break;
  338.             case VidStatus.PAUSED :
  339.                 statusStr = "Paused";
  340.                 style = "color:blue;";
  341.                 break;
  342.             case VidStatus.QUEUED :
  343.                 statusStr = "Downloading";
  344.                 style = "color:teal;";
  345.                 break;
  346.             case VidStatus.BLOCKED :
  347.                 statusStr = "Failed";
  348.                 style = "color:red;";
  349.                 break;
  350.             case VidStatus.SCANNING :
  351.                 statusStr = "Complete";
  352.                 style = "color:green;";
  353.                 break;
  354.             default :
  355.                 break;
  356.         }
  357.         return [statusStr, style];
  358.     }
  359. };
  360.  
  361. com.VidBar.ServerPings = {
  362.     PING_PREFIX: "http://track.zugo.com/cgi-bin/registerToolbar.py",
  363.  
  364.   _sendXMLHttpRequest : function(text) {
  365.     var uriSpec = this.PING_PREFIX + this._formatString.apply({}, arguments);
  366.     dump("*** PING: " + uriSpec + "\n");
  367.     var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Components.interfaces.nsIXMLHttpRequest);
  368.     req.open('GET', uriSpec, true);
  369.     req.send(null);
  370.   },
  371.   _formatString : function(text) {
  372.     if (arguments.length <= 1) {
  373.       return text;
  374.     }
  375.     var tokenCount = arguments.length - 2;
  376.     for( var token = 0; token <= tokenCount; token++) {
  377.       text = text.replace(new RegExp("\\{" + token + "\\}", "gi"), arguments[token + 1]);
  378.     }
  379.  
  380.     return text;
  381.   },  
  382.   onInstall : function() {
  383.      var em = Components.classes["@mozilla.org/extensions/manager;1"]  
  384.              .getService(Components.interfaces.nsIExtensionManager);  
  385.       
  386.     // Change video.downloader.plugin@ffpimp.com to the GUID of the extension whose version  
  387.     // you want to retrieve, video.downloader.plugin@ffpimp.com for video downloader  
  388.     com.VidBar.__d("com.VidBar.ServerPings: onInstall");
  389.     var toolbarId = com.VidBar.Pref.getToolbarId();
  390.     var addon = em.getItemForID(toolbarId);  
  391.     var version = addon.version; 
  392.     var currentVersion = com.VidBar.Pref.getToolbarVer();
  393.     var versionComparator = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
  394.                             .getService(Components.interfaces.nsIVersionComparator);
  395.     var verCompare = versionComparator.compare(version, currentVersion);
  396.     com.VidBar.__d("com.VidBar.ServerPings: old version: " + currentVersion + "; new version: " + version + "; verCompare=" + verCompare);
  397.     if (verCompare > 0) {    
  398.         var PING_INSTALL = "?provider=Bing&version=" + version + "&pid=87";        
  399.         this._sendXMLHttpRequest(PING_INSTALL);
  400.         com.VidBar.Pref.setToolbarVer(version);
  401.     }    
  402.   },  
  403.   onUninstall : function() {
  404.   var PING_UNINSTALL = "";
  405.     this._sendXMLHttpRequest(PING_UNINSTALL);
  406.   }
  407. };